Network routing allows a system to find a network path to another system. Traditionally, each routing device along the way makes a decision as to the next step in the network path. To make this decision, a routing device must have certain information about the network. This information can be dynamically obtained through routing protocols or statically configured on a routing device. Routing protocols may be classified into two groups: distance-vector routing protocols and link-state routing protocols. Both use certain metrics, such as distance in hops and network bandwidth, to calculate the best route for a particular destination. However, the metrics do not allow for more complex scenarios; instead the metrics merely provide hints in the routing decision. While some existing routing protocols may dynamically adapt and react to a changing network environment, they are limited by their predefined algorithms in the decision making process.